home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compendium Deluxe 2
/
LSD and 17bit Compendium Deluxe - Volume II.iso
/
a
/
prog
/
asmsrc
/
tango2.lha
/
SOURCES
/
1PIXSINE.S
< prev
next >
Wrap
Text File
|
1988-07-19
|
12KB
|
571 lines
; ** RAY SEE IF KODAK CAN MAKE THIS ANY BETTER **
; ** 2 PIXEL ACCURACY SINE WAVE BY TANGO OF CRYPTIC **
; ** ONLY SPREAD SOURCE TO CRYPTIC MEMBERS **
opt c-
section blitter,code_c Chip Ram please !!
include df1:definitions Give me some hardware reggies
include df1:macros Give me some macros
;LOCAL CONSTANTS
icra equ $bfed01
allocmem =-30-168
freemem =-30-180
TAKEOVER:
; KILL SYSTEM COPPER, KEYBOARD ETC.....
LEA custom,a5
LEA GFXLIB(PC),a1 Point to 'graphics.library'
MOVEQ #0,D0 Doesn't matter which version
MOVE.L 4.w,a6 EXECBASE
jsr -132(a6) task switching off (forbid)
JSR -$228(a6) Openlibrary
MOVE.L D0,GFXBASE Store library address
;Now put the graphic addresses in the CopperList
move.l #sprite,d1
move.w d1,sp0lo+2
swap d1
move.w d1,sp0hi+2
move.l GFXBASE,d0 Move gfxbase offset to d0
MOVE.L D0,A6
MOVE.W #$80,dmacon(a5) Turn off copper whilst changing it
MOVE.L $32(A6),WBCOPPER Store old (WBench) copper address
MOVE.L #OURCOPPER,$32(A6) Point to new copper list (our own)
MOVE.W #$8080,dmacon(a5) re-enable copper
MOVE.W #$8010,intena(a5)
MOVE.L $6c,old Save work bench interrupt
MOVE.L #LEV3,$6c This sets up a level 3 interrupt
move.w intenar(a5),systemints
move.b #%01111111,icra Kill keyboard
WAIT:
BTST #6,$BFE001 This waits for the left
BNE.S WAIT mouse button to be pressed
move.l 4.w,a6 EXECBASE
MOVE.L old,$6c Restore system interrupts
MOVE.L GFXBASE,A6
MOVE.W #$80,dmacon(a5) Disable DMA
MOVE.L WBCOPPER,$32(A6) Restore old copperlist
MOVE.W #$8080,dmacon(a5) Enable DMA
move.w systemints,d0 Systems interrupt
or.w #$c000,d0
move.w d0,intena(a5) Enable OS interrupts
move.b #%10011011,icra Enable keyboard
clr.w $dff0a8 Clear music
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
move.w #$f,$dff096
CLR.L D0
rts
ERROR:
move.l 4.w,a6 Get EXECBASE
jsr -138(a6) Permit ( multi-tasking on )
moveq #0,d0 Clear d0
RTS Return to AmigaDOS
;This is the NEW level 3 interrupt
LEV3:
MOVEM.L d0-d7/a0-a6,-(sp) Save all registers to the stack
lea custom,a5
AND #$10,intreqr(a5) Check if interrupt is from Copper
BNE out
move.w #$8010,$9c
; ** ALL ROUTINES CALLED (HOPEFULLY) EVERY VBI **
MOVE.W #$FFF,$DFF180
bsr try_sin
bsr testscroll
move.l sin_screen,d1 Bitplane memory address
move.w d1,bp1lo+2 Used for double buffering
swap d1
move.w d1,bp1hi+2
bsr move_stars
MOVE.W #$000,$DFF180
out:
MOVEM.L (sp)+,d0-d7/a0-a6 Restore the registers
DC.W $4ef9 hex value for JMP instruction
old:
DC.L 0 will jump to normal interrupt
; ** Move the sprites **
move_stars:
sub.b #$1,x+1
sub.b #$2,x+9
sub.b #$1,x+17
sub.b #$3,x+25
sub.b #$2,x+33
sub.b #$4,x+41
sub.b #$2,x+49
sub.b #$1,x+57
sub.b #$3,x+65
sub.b #$1,x+73
sub.b #$2,x+81
sub.b #$4,x+89
sub.b #$3,x+97
sub.b #$2,x+105
sub.b #$1,x+113
sub.b #$4,x+121
sub.b #$3,x+129
sub.b #$3,x+137
sub.b #$2,x+145
sub.b #$4,x+153
sub.b #$1,x+161
sub.b #$3,x+169
sub.b #$1,x+177
sub.b #$2,x+185
sub.b #$4,x+193
sub.b #$1,x+201
sub.b #$3,x+209
sub.b #$1,x+217
sub.b #$2,x+225
sub.b #$2,x+233
rts
; ** Double Buffer The Screen **
Buff:
Eor.l #10240,Tango ; Next screen is 10240 bytes along
Move.l Tango,D1
Move.l #SinePlane,d2
Add.l D1,d2
Move.l D2,Sin_Screen
Rts
; ** THE SCROLL ROUTINE **
testscroll:
tst.l stopper
beq.s scroll
sub.l #1,stopper
rts
scroll:
cmp.l #15*4,val Blitshifted all <<<
blo.s coarse_scroll_it No then get doing it !!
bsr blit_char Blit letter to screen
clr.l val Reset index
coarse_scroll_it:
bsr coarse Scroll all line
rts
; ** BLIT LETTER ON THE SCREEN **
blit_char
jsr text
lea custom,a5 Get custom chip address
move.l screenx,a0 Can~t see this picture !!
move.l #font,a1 Put font in blitter source
add.l d1,a1
blit_test:
btst #14,$dff002 Blitter busy !!!
bne blit_test Lets wait till she finishes !
move.w #$ffff,bltafwm(a5)
move.w #$ffff,bltalwm(a5)
move.l a0,bltdpth(a5) Blitter dest D (BOTTOM OF SCREEN)
move.l a1,bltapth(a5) Blitter source A (SCROLLING FONT)
move.w #38,bltamod(a5) Modulo (20-1)*2
move.w #38,bltdmod(a5) Modulo (20-1)*2
move.w #$9f0,bltcon0(a5) Minterms D=A
clr.w bltcon1(a5) Set Ascending mode
move.w #16*64+1,bltsize(a5) Blit size (SIZE OF FONT)
rts Return
; ** BLITSHIFT THE ENTIRE SCROLL LINE **
coarse:
lea custom,a5
move.l screenx,a0 ; Can~t see this picture !!
move.l a0,a1
add.l #2,a1
blit_wait:
btst #14,$dff002
bne blit_wait
incl #4,val ; (1 for slower)
move #15,d7 ; Amount of pixels to shift(15 for slow)
ror #4,d7 ; Set to correct bits (12-15)
or #%100111110000,d7
move.l #-1,bltafwm(a5)
move.l a1,bltapth(a5)
move.l a0,bltdpth(a5)
move.w #0,bltamod(a5)
move.w #0,bltdmod(a5)
move.w d7,bltcon0(a5)
move.w #80*64+20,bltsize(a5)
rts
; ** BLITTER CLEAR WHERE THE SINE SCROLL HAS JUST BEEN **
CLEAR:
Move.l Sin_Screen,a0
wate
btst #14,$dff002
bne.s wate
Move.l a0,Bltdpth(a5)
Move #0,Bltdmod(a5)
Move.l #$1f00000,Bltcon0(a5)
Move #150*64+20,Bltsize(a5)
Rts
; ** DO THE SINEWAVE **
; BLITTER HAS TO COPY EVERY 2 PIXELS ACROSS, THATS ALOT OF WORK !!!
try_sin:
Bsr buff
bsr clear
Move.l Table1,A3
Move.b (A3),d1
Cmp.b #$ff,d1
Bne ItsOkYa
Move.l #SinTab,A3
ItsOkYa
Add.l hi_amplitude,A3
Move.l a3,Table1
Move.l A3,Table
lea custom,a5
MOVE.W #$DFC,D2 ; D=A+B
LEA BLTAFWM(A5),A2 ; FWM IN A2
LEA BLTSIZE(A5),A4 ; BLITSIZE IN A4
LEA BLTAPTH(A5),A6
MOVE.W #16*64+1,D7 ; IN D3
move.l screenx,a0 ; Source A
move.l #18,d4 ; Number of chars along screen
clr.l d5
clr.l d6
ban:
MOVE.W #%1000000000000000,d3 ; PUT TO 1 FOR ONE PIXEL
blit_test0:
BSR BLIT_WAITMAN
move.w D2,bltcon0(a5)
clr.w bltcon1(a5)
move.w #38,bltamod(a5)
move.w #38,bltdmod(a5)
move.w #38,bltbmod(a5)
REPT 16
move.l sin_screen,a1
bsr get_sinvalue
move.w d3,(A2) ; FWM MASK
move.l a1,bltdpth(a5)
move.l a1,bltbpth(a5)
move.l a0,(A6)
MOVE.W D7,(A4) ; BLITSIZE
LSR #1,D3
ENDR
add.l #2,a0 ; Get next letter along
add.l #2,d6
dbf d4,ban
rts
BLIT_WAITMAN:
BTST #14,$DFF002
BNE.S BLIT_WAITMAN
RTS
get_sinvalue:
Clr.l D5
Move.l Table,A3
Move.b (A3),d5
cmp.b #$ff,d5
bne cryptic90
Move.l #SinTab,A3
Move.b (a3),d5
cryptic90
Add.l lo_amplitude,A3
Move.l A3,Table
mulu #40,d5
add.l d5,a1
Add.l D6,A1
rts
Table1: Dc.l SinTab
table: dc.l sintab
; ** RAY SEE IF YOU CAN GET A BETTER SINUS TABLE FOR FULL SCREEN !!! **
sintab:
dc.b $3C,$3F,$42,$46,$49,$4C,$50,$53,$56,$59
dc.b $5C,$5F,$61,$64,$67,$69,$6B,$6D,$6F,$71
dc.b $72,$73,$75,$76,$76,$77,$77,$77,$77,$77
dc.b $77,$76,$76,$75,$73,$72,$71,$6F,$6D,$6B
dc.b $69,$67,$64,$61,$5F,$5C,$59,$56,$53,$50
dc.b $4C,$49,$46,$42,$3F,$3C,$38,$35,$31,$2E
dc.b $2B,$27,$24,$21,$1E,$1B,$18,$16,$13,$10
dc.b $E,$C,$A,$8,$6,$5,$4,$2,$1,$1
dc.b $0,$0,$0,$0,$0,$0,$1,$1,$2,$4
dc.b $5,$6,$8,$A,$C,$E,$10,$13,$16,$18
dc.b $1B,$1E,$21,$24,$27,$2B,$2E,$31,$35
dc.b $38,255
EVEN
; ** CHARACTER DECODER ROUTINE **
text:
move.l acurent,a2 Get message
clr.l d1
move.b (a2)+,d1 Update it
move.b d1,letter Store in offset
cmp.b #255,d1 Check for end of message
beq.w rst_text If equal, then reset
cmp.b #254,d1
beq stop
sub.l #32,d1 Subract 32 (ie space)
asl d1 Times by 2
move.l a2,acurent Update acurent
CMP.B #"4",letter Is letter "K" or larger
BPL.s add_more If larger then add on
rts Return
add_more:
CMP.B #"H",letter Is letter "U" or larger
BPL.S add_more2 If larger then add on
add.l #40*15,d1 Get next line down (KLMNOPQRST)
rts
add_more2:
add.l #40*30,d1 Get next line down (UVWXYZ0123)
rts
rst_text:
move.l #0,d1
move.l #message,d2 Get begining of text
move.l d2,acurent Reset to begining
rts Return
stop:
move.l #0,d1
add.l #1,acurent
move.l #150,stopper
rts
message:
; 254=STOP,255=END.
DC.B " HI RAY THIS IS A 2 PIXEL SINE SCROLL (HONESTLY!!)"
DC.B " CHECK OUT THE SINETABLE IN THE SOURCE AND SEE IF YOU CAN GET A BETTER AND BIGGER ONE TO GET FULL SCREEN"
DC.B " ALSO SEE IF KODAK CAN MAKE THIS RUN ANY FASTER COS ITS ABIT SLOOOOW"
DC.B " WRITE SOON.... PS. I'LL SEE YA ALL IN BLACKPOOL ON SATURDAY !!!!!"
DC.B " WRAP ",255
EVEN
; ** THE COPPERLIST **
OURCOPPER:
sp0lo: dc.w spr0ptl,$0000
sp0hi: dc.w spr0pth,$0000
dc.w bpl1mod,0,bpl2mod,0
dc.w diwstrt,$2c81+16,diwstop,$2cc1
dc.w bplcon0,$1200,bplcon1,$0000
dc.w ddfstrt,$38,ddfstop,$d0
* dc.w color00,$000,color01,$094
dc.w color16,$aaa,color17,$aaa,color18,$aaa
dc.w color19,$aaa,color20,$aaa
bp1lo: dc.w bpl1ptl,$0000
bp1hi: dc.w bpl1pth,$0000
wait $2c09,$fffe
dc.w color01,$f00
wait $2e09,$fffe
dc.w color01,$f11
wait $3009,$fffe
dc.w color01,$f00
wait $3209,$fffe
dc.w color01,$f11
wait $3409,$fffe
dc.w color01,$f22
wait $3609,$fffe
dc.w color01,$f33
wait $389,$fffe
dc.w color01,$f44
wait $3a09,$fffe
dc.w color01,$f55
wait $3c09,$fffe
dc.w color01,$f66
wait $3e09,$fffe
dc.w color01,$f77
wait $4009,$fffe
dc.w color01,$f88
wait $4209,$fffe
dc.w color01,$f99
wait $4409,$fffe
dc.w color01,$faa
wait $4609,$fffe
dc.w color01,$fbb
wait $4809,$fffe
dc.w color01,$fcc
wait $4a09,$fffe
dc.w color01,$fdd
wait $4c09,$fffe
dc.w color01,$fee
wait $4e09,$fffe
dc.w color01,$fff
wait $5109,$fffe
dc.w color01,$eef
wait $5309,$fffe
dc.w color01,$ddf
wait $5509,$fffe
dc.w color01,$ccf
wait $5709,$fffe
dc.w color01,$bbf
wait $5909,$fffe
dc.w color01,$aaf
wait $5b09,$fffe
dc.w color01,$99f
wait $5d09,$fffe
dc.w color01,$88f
wait $5f09,$fffe
dc.w color01,$77f
wait $6109,$fffe
dc.w color01,$66f
wait $6309,$fffe
dc.w color01,$55f
wait $6509,$fffe
dc.w color01,$44f
wait $6709,$fffe
dc.w color01,$33f
wait $6909,$fffe
dc.w color01,$22f
wait $6a09,$fffe
dc.w color01,$11f
wait $6c09,$fffe
dc.w color01,$00f
wait $6e09,$fffe
dc.w color01,$11f
wait $7109,$fffe
dc.w color01,$22f
wait $7309,$fffe
dc.w color01,$33f
wait $7509,$fffe
dc.w color01,$44f
wait $7709,$fffe
dc.w color01,$55f
wait $7909,$fffe
dc.w color01,$66f
wait $7a09,$fffe
dc.w color01,$77f
wait $7c09,$fffe
dc.w color01,$88f
wait $7e09,$fffe
dc.w color01,$99f
wait $8009,$fffe
dc.w color01,$aaf
wait $8209,$fffe
dc.w color01,$bbf
wait $8409,$fffe
dc.w color01,$ccf
wait $8609,$fffe
dc.w color01,$ddf
wait $8809,$fffe
dc.w color01,$eef
wait $8a09,$fffe
dc.w color01,$fff
wait $8c09,$fffe
dc.w color01,$fee
wait $8e09,$fffe
dc.w color01,$fdd
wait $9109,$fffe
dc.w color01,$fcc
wait $9309,$fffe
dc.w color01,$fbb
wait $9509,$fffe
dc.w color01,$faa
wait $9709,$fffe
wait $9909,$fffe
dc.w color01,$f99
wait $9b09,$fffe
dc.w color01,$f88
wait $9d09,$fffe
dc.w color01,$f77
wait $9f09,$fffe
dc.w color01,$f66
end_copper
;LOCAL CONSTANTS
WBCOPPER: DC.L 0
GFXLIB: DC.B "graphics.library",0
GFXBASE: DC.L 0
systemints: dc.l 0
scroll_offset: dc.l 0
screenx: dc.l picture
letter: dc.b 0
acurent: dc.l message
val: dc.l 0
lo_amplitude: dc.l 1 ; PISS AROUND WITH THESE
hi_amplitude: dc.l 2 ; PISS AROUND WITH THESE
Tango Dc.l 0
sin_screen: Dc.l SinePlane
stopper: dc.l 0
;BINARY FILES TO BE INCLUDED
EVEN
picture
dcb.b 10240,0
SinePlane
dcb.b 10240,0
dcb.b 10240,0
font
incbin df1:neatfont.bin
sprite:
include df1:sprite.list